#单例--让类创建的对象，在系统中只有唯一一个实例
#1.定义一个类属性，初始值为None，用于记录单例对象的引用
#2.重写__new__方法
#3.如果类属性is None，调用父类方法分配空间，并在类属性中记录结果
#4.返回类属性中 记录的对象引用
class MusicPlayer(object):
    #记录第一个被创建对象的引用
    instance=None
    def __new__(cls, *args, **kwargs):
        #判断类属性是否为空对象
        if cls.instance is None:
        #2.调用父类的方法，为第一个对象分配空间
            cls.instance=super().__new__(cls)
            print(cls.instance)
        #3.返回类属性保存的对象引用
        return cls.instance
player1=MusicPlayer()
print(player1)
player2=MusicPlayer()
print(player2)


print('*'*50)
class MusicPlayer(object):
    #记录第一个被创建对象的引用
    instance=None
    #记录是否执行过初始化方法
    init_flag=False
    def __new__(cls, *args, **kwargs):
        #判断类属性是否为空对象
        if cls.instance is None:
        #2.调用父类的方法，为第一个对象分配空间
            cls.instance=super().__new__(cls)
            print(cls.instance)
        #3.返回类属性保存的对象引用
        return cls.instance
    #让初始化动作只执行一次
    def __init__(self):
        #1.判断是否执行过初始化动作
        if MusicPlayer.init_flag:
            return
        #2.如果没有执行过，再执行初始化动作
        print('初始化')
        #3.修改类属性的标记
        MusicPlayer.init_flag=True

player1=MusicPlayer()
print(player1)
player2=MusicPlayer()
print(player2)




















